/**
 * yield:线程的礼让。让出cpu，让其他线程执行，但礼让的时间不确定，所以不一定礼让成功
 * join:线程的插队，插队的线程一旦插队成功。则肯定先执行完插入的线程的所有任务
 */
public class YieldAndJoinTest {
    public static void main(String args[])
    {
        Y y = new Y();
        y.start();
        for(int i=1;i<=20;i++)
        {
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("主线程(小弟)吃了"+i+"个包子");
            if(i == 5)
            {
                System.out.println("主线程(小弟) 让 子线程(老大)先吃");
                try {
                    y.join();//这个过程相当于让Y线程插队
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("子线程(老大)吃完了，主线程(小弟)接着吃...");
            }
        }
    }
}

class Y extends Thread
{
    @Override
    public void run() {
        for (int i = 1; i <=20 ; i++) {
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("子线程(老大) 吃了"+i+"个包子");
        }
    }
}
